#ifndef VISTA_H_
#define VISTA_H_

#include <string>
#include <map>
#include <utility>
#include <vector>
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL/SDL_ttf.h"
#include "SDL/SDL_mixer.h"

#include "Camara2.h"
#include "../Utils/Logger.h"
#include "../Utils/YamlParser.h"
#include "../Utils/GestionId.h"
#include "../Utils/GestionSonidos.h"
#include "Dibujable.h"

using namespace std;

typedef int numCuadro_t;

class Vista {

	protected:
	
		Pantalla* pantalla;
		Camara* camara;
		SDL_Surface* fondo_estatico;
		SDL_Rect* rectPersonaje;
		int anchoNivel, altoNivel;
		map<idImagen_t, Dibujable*> mapaImagenes;
		map<idSonido_t, Mix_Chunk*> mapaSonidos;
		SDL_Surface* fondoNivel;
		TTF_Font* font14;
		TTF_Font* font32;
		TTF_Font* font54;
		
		vector <Mix_Music*> v_musicas;
		int musicaEnReproduccion;
		
	public:

		Vista(SDL_Rect* rectPersonaje, Pantalla* pantalla, int anchoNivel, int altoNivel);
		virtual ~Vista();
		bool CrearSuperficiePantalla();
		void CrearMapaImagenes(vector<infoImagen_t> infoImagenes, string path);
		void CrearMapaSonidos(vector<infoSonido_t> infoSonidos, string path, int personaje);
		void setPersonajeX(int x);
		void setPersonajeY(int y);
		void elegirFondo();
		bool CrearFondo(idImagen_t idImagenFondo);
		void PintarFondo(vector< pair < pair<idImagen_t, numCuadro_t> , Punto> > dibujables);
		void Dibujar(vector< pair < pair<idImagen_t, numCuadro_t> , Punto> > dibujables);
		void DibujarPuntaje(vector< pair<idImagen_t, string> > puntajes);
		void DibujarBarraEstado(string mensaje);
		void InsertarCuadro();
		void ReproducirSonidos(vector< pair< pair<bool, int>, Punto> > sonidos);
		void IniciarSonido();
		void FinalizarSonido();
		void FinalizarJuego(string mensaje);
};

#endif /* VISTA_H_ */
